package br.com.virtual.cadastrar.dao.impl;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.NoResultException;

import br.com.virtual.base.dao.impl.BaseDaoImpl;
import br.com.virtual.cadastrar.dao.PessoaFisicaDAO;
import br.com.virtual.cadastrar.model.PessoaFisica;

public class PessoaFisicaDAOImpl extends BaseDaoImpl implements PessoaFisicaDAO {

	@Override
	public PessoaFisica create(PessoaFisica pessoaFisica) {

		try {
			getManager().persist(pessoaFisica);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return pessoaFisica;
	}

	@Override
	public PessoaFisica read(Long id) {
		return getManager().find(PessoaFisica.class, id);
	}

	@Override
	public void update(PessoaFisica pessoaFisica) {
		getManager().merge(pessoaFisica);
	}

	@Override
	public void delete(PessoaFisica pessoaFisica) {
		getManager().remove(read(pessoaFisica.getId()));
	}

	@Override
	public List<PessoaFisica> getList() {
		return this.list();
	}

	private List<PessoaFisica> list() {
		return new ArrayList<PessoaFisica>(getManager().createQuery(
				"from PessoaFisica p ", PessoaFisica.class).getResultList());
	}

	@Override
	public PessoaFisica findByCPF(String cpf) {

		try {

			return getManager()
					.createQuery("from PessoaFisica p where p.cpf = :cpf",
							PessoaFisica.class).setParameter("cpf", cpf)
					.getSingleResult();
		} catch (NoResultException n) {
			return null;
		}

	}

}
